package com.yunyi.system.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.yunyi.common.core.domain.AjaxResult;
import com.yunyi.common.core.domain.TreeSelect;
import com.yunyi.common.core.domain.entity.SysOffice;

import java.util.List;

/**
* @author ZouLi
* @description 针对表【sys_office(机构表)】的数据库操作Service
* @createDate 2023-08-24 09:52:35
*/
public interface SysOfficeService extends IService<SysOffice> {

    /**
     * @Description: 查询机构列表
     * @Param [office]
     * @Return java.util.List<com.yunyi.common.core.domain.entity.SysOffice>
     * @Throws
     **/
    List<SysOffice> selectOffices(SysOffice office);

    /**
     * @Description: 查询前端树状图数据
     * @Param []
     * @Return java.util.List<com.yunyi.common.core.domain.TreeSelect>
     * @Throws
     **/
    List<TreeSelect> selectOfficeTreeList(SysOffice office);

    /**
     * @Description: 构建前端树状图数据
     * @Param [office]
     * @Return java.util.List<com.yunyi.common.core.domain.TreeSelect>
     * @Throws
     **/
    List<TreeSelect> buildOfficeTreeListData(List<SysOffice> offices);

    /**
     * @Description: 构建前端树状结构
     * @Param [office]
     * @Return java.util.List<com.yunyi.common.core.domain.entity.SysOffice>
     * @Throws
     **/
    List<SysOffice> buildOfficeTree(List<SysOffice> offices);

    /**
     * @Description: 查询父机构下的所有子机构（包括父机构）
     * @Param [parentId]
     * @Return java.util.List<com.yunyi.common.core.domain.entity.SysOffice>
     * @Throws
     **/
    List<SysOffice> selectOfficeByParentId(Integer parentId);

    /**
     * @Description: 添加机构
     * @Param [office]
     * @Return java.lang.Boolean
     * @Throws
     **/
    Boolean addOffice(SysOffice office);

    /**
     * @Description: 修改机构
     * @Param [office]
     * @Return java.lang.Boolean
     * @Throws
     **/
    Boolean updateOffice(SysOffice office);

    /**
     * @Description: 删除机构
     * @Param [id]
     * @Return java.lang.Boolean
     * @Throws
     **/
    Boolean deleteOffice(Integer id);

    /**
     * @Description: 根据所属医院查询其部门
     * @Param [id]
     * @Return java.util.List<com.yunyi.common.core.domain.entity.SysOffice>
     * @Throws
     **/
    List<SysOffice> getOfficeByCompany(Integer id);

    AjaxResult getApplayForHospital();
}
